{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Visualizing Linear Regression "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f77fa9eb3d0>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n+H83g9/CAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f77faf14d10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline  \n",
    "\n",
    "np.random.seed(1)\n",
    "def f(x, a, b):\n",
    "    n    = train_X.size\n",
    "    vals = np.zeros((1, n))\n",
    "    for i in range(0, n):\n",
    "        ax  = np.multiply(a, x.item(i))\n",
    "        val = np.add(ax, b)\n",
    "        vals[0, i] = val\n",
    "    return vals\n",
    "\n",
    "Wref = 0.7\n",
    "bref = -1.\n",
    "n    = 20\n",
    "noise_var = 0.001\n",
    "train_X   = np.random.random((1, n))\n",
    "ref_Y     = f(train_X, Wref, bref)\n",
    "train_Y   = ref_Y + np.sqrt(noise_var)*np.random.randn(1, n)\n",
    "n_samples = train_X.size \n",
    "\n",
    "# Plot\n",
    "plt.figure(1)\n",
    "plt.plot(train_X[0, :], ref_Y[0, :], 'ro', label='Original data')\n",
    "plt.plot(train_X[0, :], train_Y[0, :], 'bo', label='Training data')\n",
    "plt.axis('equal')\n",
    "plt.legend(loc='lower right')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0/1000] cost :0.215 Wtemp is -0.696 and Wref is 0.700 btemp is -0.172 and bref is -1.000\n",
      "[100/1000] cost :0.003 Wtemp is 0.505 and Wref is 0.700 btemp is -0.928 and bref is -1.000\n",
      "[200/1000] cost :0.001 Wtemp is 0.667 and Wref is 0.700 btemp is -0.992 and bref is -1.000\n",
      "[300/1000] cost :0.001 Wtemp is 0.688 and Wref is 0.700 btemp is -1.000 and bref is -1.000\n",
      "[400/1000] cost :0.001 Wtemp is 0.690 and Wref is 0.700 btemp is -1.001 and bref is -1.000\n",
      "[500/1000] cost :0.001 Wtemp is 0.690 and Wref is 0.700 btemp is -1.001 and bref is -1.000\n",
      "[600/1000] cost :0.001 Wtemp is 0.691 and Wref is 0.700 btemp is -1.001 and bref is -1.000\n",
      "[700/1000] cost :0.001 Wtemp is 0.691 and Wref is 0.700 btemp is -1.001 and bref is -1.000\n",
      "[800/1000] cost :0.001 Wtemp is 0.691 and Wref is 0.700 btemp is -1.001 and bref is -1.000\n",
      "[900/1000] cost :0.001 Wtemp is 0.691 and Wref is 0.700 btemp is -1.001 and bref is -1.000\n"
     ]
    }
   ],
   "source": [
    "# Parameters \n",
    "training_epochs = 1000\n",
    "display_step    = 100\n",
    "\n",
    "# Set TensorFlow Graph\n",
    "x = tf.placeholder(tf.float32, name=\"INPUT_x\")\n",
    "y = tf.placeholder(tf.float32, name=\"OUTPUT_y\")\n",
    "W = tf.Variable(np.random.randn(), name=\"WEIGHT_W\")\n",
    "b = tf.Variable(np.random.randn(), name=\"BIAS_b\")\n",
    "\n",
    "# Construct a Model\n",
    "activation = tf.add(tf.mul(x, W), b)\n",
    "\n",
    "# Define Error Measure and Optimizer\n",
    "learning_rate   = 0.01\n",
    "cost = tf.reduce_mean(tf.pow(activation-y, 2))\n",
    "optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #Gradient descent\n",
    "\n",
    "# Initializer\n",
    "init = tf.initialize_all_variables()\n",
    "\n",
    "# Run! \n",
    "sess = tf.Session()\n",
    "# Initialize\n",
    "sess.run(init)\n",
    "# Summary\n",
    "summary_writer = tf.train.SummaryWriter('/tmp/tf_logs/linear_regression', graph=sess.graph)\n",
    "for epoch in range(training_epochs):\n",
    "    for (_x, _y) in zip(train_X[0, :], train_Y[0, :]):\n",
    "        # print \"x: \", x, \" y: \", y\n",
    "        sess.run(optimizer, feed_dict={x:_x, y:_y})\n",
    "    \n",
    "    # Check cost\n",
    "    if epoch % display_step == 0:\n",
    "        costval = sess.run(cost, feed_dict={x: train_X, y:train_Y})\n",
    "        print(\"[%d/%d] cost :%.3f\" % (epoch, training_epochs, costval)),\n",
    "        Wtemp = sess.run(W)\n",
    "        btemp = sess.run(b)\n",
    "        print(\"Wtemp is %.3f and Wref is %.3f\" % (Wtemp, Wref)),\n",
    "        print(\"btemp is %.3f and bref is %.3f\" % (btemp, bref))\n",
    "        \n",
    "# Final W and b\n",
    "Wopt = sess.run(W)\n",
    "bopt = sess.run(b)\n",
    "fopt = f(train_X, Wopt, bopt)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f77cc2d8990>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\niIiI4NJLL2XgwIF8++23/PKXv+SKK67Q8yQnJzN9+nTWrVtHVlZrXYKwd+9evvrqK9auXUt4eDjX\nXHMN48ePt7n2nXfeaXP9Z599lsrKSmJiYuyW86abbtK3J0+ezGOPPcamTZv0n4M9xcXFFBcXt1pW\naDu4t7Yc/WG0wH8I6AX87CDfPy1fAI8Cex2d0Dq4C+dsLS9vNtdn05unR9jtTL/32hbHtGxnHw4M\n59JLc1m9Otf9hRQ+URcRYXd/fWSk186RkJDA0aNHaWhoaBHgDx48yFlnNU1vcc455zg8z4EDB2xe\n79q1Kz179mz12klJTfXSqKgoTp48CcAPP/zA//zP//D1119z6tQp6urqGDRoUJv3cuDAAeLi4uja\ntau+Lzk5mZ9++gnQ+glmz57Nu+++y5EjR/T7PXr0qB7cm3v99dd55pln9JlXq6qqKCsra7UczSu+\njzzyiN18rnSorgKmWbanASsd5Dvb8r0fcAOwzIVrBjSTqYS0tDkYjblOjTc3GAz8e6s2gUAhUEA0\naQyml2EkfWKuZdbsy3kwd2aL4yIi6uyeLzJSOrECSWpmJrNTbMcvZKekMDojw8ER7j/HVVddRURE\nBO+9957N/qqqKlavXs211zZVPlqbO6V3797s27dPT58+fbrNIOjIPffcw0UXXcTOnTupqKhg4cKF\nNDQ4bFDQ9erVi/Lyck6dOqXv27Nnj17uZcuWsWrVKj799FMqKirYvXs30FRbb35/e/bsYfr06fz9\n73/n2LFjlJeXc/HFF7ttjiBXxrk/DrwD3A2Ugj4xSW9gCZBuSb8L9ATOAH8BTrhwzYBlMpWQlbXG\nqrnE8Xjzb7/9lssvv1xPrysooCg/n9DqagZHRpKdkcHw9HQcycxMxWyebXOtlJRsMjLGuOt2RCfQ\n+B6Ya3lv1EdGMqaN94a7z9G9e3dycnLIyMggNjaWkSNHsn//fv7yl7/Qt29fpkyZ4tR5Jk2axFVX\nXcX69ev59a9/TW5uboeDYFVVFTExMURFRbFjxw6ef/55zj777DaPS05OZtCgQeTk5PDoo4+yceNG\nCgoKuP766/XzRkREEB8fz8mTJ8nOzrY5PjExkV27dunpkydPYjAYSEhIoKGhgddff51t27Z16J7s\ncSW4HwNG2dl/gKbADk2NuqIVtu3gGrN5Ifn5c22Cu/V//6eeeor7778fk6mETWoQNYQRoeoYgv2P\n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\ngg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f77fa9466d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot Results\n",
    "plt.figure(2)\n",
    "plt.plot(train_X[0, :], ref_Y[0, :], 'ro', label='Original data')\n",
    "plt.plot(train_X[0, :], train_Y[0, :], 'bo', label='Training data')\n",
    "plt.plot(train_X[0, :], fopt[0, :], 'k-', label='Fitted Line')\n",
    "plt.axis('equal')\n",
    "plt.legend(loc='lower right')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Run the command line\n",
    "##### tensorboard --logdir=/tmp/tf_logs/linear_regression\n",
    "### Open http://localhost:6006/ into your web browser"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"images/tsboard/linear_regression.png\">"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
